package com.itcam.cm.common.interceptor;

import com.alibaba.fastjson.JSON;
import com.itcam.cm.model.entity.user.AuthContextUtil;
import com.itcam.cm.model.entity.user.UserInfo;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;

public class UserLoginAuthInterceptor implements HandlerInterceptor {


    /**
     * 在请求处理之前进行拦截处理
     * 该方法会在请求到达控制器之前被调用，用于验证请求头中的用户信息
     * 如果用户信息存在，则将其解析并设置到上下文工具类中
     *
     * @param request  当前的 HTTP 请求对象
     * @param response 当前的 HTTP 响应对象
     * @param handler  执行链中的下一个处理器
     * @return 如果返回 true，则继续执行后续的拦截器和控制器；如果返回 false，则中断请求处理
     * @throws Exception 如果在处理过程中发生异常
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 从请求头中获取名为 "userJson" 的用户信息 JSON 字符串
        String userJson = request.getHeader("userJson");
        // 检查获取到的用户信息 JSON 字符串是否不为空
        if (StringUtils.hasText(userJson)) {
            // 如果不为空，使用 JSON 工具将 JSON 字符串解析为 UserInfo 对象
            // 并将解析后的 UserInfo 对象设置到 AuthContextUtil 上下文中
            AuthContextUtil.setUser(JSON.parseObject(userJson, UserInfo.class));
        }
        // 返回 true 表示继续执行后续的拦截器和控制器
        return true;
    }


}